
// <editor-fold defaultstate="collapsed" desc="LIBRERIAS">                          
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Observable;
import java.util.Observer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import principal.Cliente;
import principal.Servidor;
import principal.VentanaConexion;
import sonido.Sonido;
// </editor-fold>         

public class Botones extends JFrame implements Observer {

    // <editor-fold defaultstate="collapsed" desc="ATRIBUTOS">                          
    JPanel panel;
    JPanel panel2;
    private int barcos = 2;
    private int aviones = 2;
    private int tanques = 2;
    int dimension_tabla = 10;
    int numero_labes = 10;
    int vida = 18;
    boolean btnCentron_arriba = true;
    boolean btnCentron_izq = true;
    boolean btnCentron_der = true;
    boolean borrado = false;
    Sonido sonido = new Sonido("C:\\Users\\Die-Go15\\Desktop\\Proyecto2_1.4\\src\\sonido\\click.wav");
    public VentanaConexion ventanaConexion;
    public boolean isServer;
    Servidor server;
    Cliente cliente;
    String host, puerto;
    ArrayList<Boton> btnCentrones = new ArrayList<>();
    // </editor-fold>         

    // <editor-fold defaultstate="collapsed" desc="CONSTRUCTORES">                          
    public Botones() {

        super("JUEGO GUERRAS");
        ventanaConexion = new VentanaConexion();
        panel2 = (JPanel) this.getContentPane();
        panel = (JPanel) this.getContentPane();
        panel.setLayout(new GridLayout(dimension_tabla, dimension_tabla + 1));

        final ArrayList<Label> labels = new ArrayList<>();
        labels.add(new Label("PUNTAJE", 0));
        labels.add(new Label("    " + vida, 0));
        for (int i = 1, cont = 1; i < numero_labes - 1; i++) {
            Label lbl = new Label("", 3);
            if (i % 2 != 0) {
                lbl.setIcono("imagenes/arma" + cont + ".gif");

                lbl.getEvent();
                cont++;
            } else {
                lbl.setTexto("   " + barcos);
            }
            labels.add(lbl);

        }
        labels.get(9).setTexto("Bombas");
        for (int i = -10; i < (dimension_tabla * dimension_tabla + 1); i++) {
            if (i % dimension_tabla == 0) {
                btnCentron_izq = false;
            }
            if (i < dimension_tabla) {
                btnCentron_arriba = false;
            }
            if (((i + 1) % dimension_tabla) == 0) {
                btnCentron_der = false;
            }
            btnCentrones.add(new Boton(btnCentron_arriba, btnCentron_izq, btnCentron_der, i));
            btnCentron_arriba = btnCentron_der = btnCentron_izq = true;
        }
        ventanaConexion.getBtnConectar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                try {
                    puerto = ventanaConexion.getTxtPuerto().getText();
                    host = ventanaConexion.getTxtDireccion().getText();
                    if (ventanaConexion.getjComboBox1().getSelectedIndex() == 1) {

                        ventanaConexion.setVisible(false);
                        cliente = new Cliente(host);

                        labels.get(0).setTexto("VIDAS");
                        setTitle("JUGADOR CLIENTE");

                    } else {
                        server = new Servidor();
                        ventanaConexion.setVisible(false);
                        labels.get(0).setTexto("VIDAS");
                        setTitle("JUGADOR SERVIDOR");
                        isServer = true;
                    }
                } catch (NumberFormatException numberFormatException) {
                }
            }
        });
        for (int i = 0, cont_btns = 10; i < (dimension_tabla * dimension_tabla + numero_labes + 1); i++) {
            if ((i % (dimension_tabla + 1)) == 0 && i < (dimension_tabla * dimension_tabla + numero_labes)) {
                int x = i / (dimension_tabla + 1);
                Label lb = (Label) labels.get(x);
                panel.add(lb.label);
            } else if (i < (dimension_tabla * dimension_tabla + numero_labes)) {
                final Boton btnCentro = (Boton) btnCentrones.get(cont_btns);
                final Boton btnArriba = (Boton) btnCentrones.get(cont_btns - 10);
                final Boton btnIzq = (Boton) btnCentrones.get(cont_btns - 1);
                final Boton btnDer = (Boton) btnCentrones.get(cont_btns + 1);
                MouseListener ml = new MouseListener() {
                    @Override
                    public void mouseClicked(MouseEvent e) {

                        if ((boolean) labels.get(2).presionado == true && btnCentro.clickeado == false && btnIzq.clickeado == false && tanques > 0 && btnCentro.Izq) {
                            btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma1_der.png")));
                            btnIzq.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma1_izq.png")));
                            btnIzq.clickeado = btnIzq.esArma = true;
                            btnCentro.clickeado = btnCentro.esArma = true;
                            try {

                                sonido.reproducir();
                            } catch (FileNotFoundException ex) {
                                System.out.println("" + ex.getMessage());
                            } catch (IOException ex) {
                                System.out.println("" + ex.getMessage());
                            }
                            tanques--;
                            labels.get(3).setTexto(tanques + "");

                        }
                        if ((boolean) labels.get(4).presionado == true && btnCentro.clickeado == false && btnIzq.clickeado == false && btnDer.clickeado == false && aviones > 0 && btnCentro.Izq && btnCentro.Der) {
                            btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma2_centro.png")));
                            btnIzq.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma2_izq.png")));
                            btnDer.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma2_der.png")));
                            btnDer.clickeado = btnDer.esArma = true;
                            btnIzq.clickeado = btnIzq.esArma = true;
                            btnCentro.clickeado = btnCentro.esArma = true;
                            try {
                                //sonido= new Sonido("C:\\Users\\Die-Go15\\Desktop\\pry\\Proyecto2_1.3\\src\\sonido\\click.wav");
                                sonido.reproducir();
                            } catch (FileNotFoundException ex) {
                                System.out.println("" + ex.getMessage());
                            } catch (IOException ex) {
                                System.out.println("" + ex.getMessage());
                            }
                            aviones--;
                            labels.get(5).setTexto(aviones + "");
                        }
                        if ((boolean) labels.get(6).presionado == true && barcos > 0 && btnArriba.clickeado == false && btnIzq.clickeado == false && btnCentro.clickeado == false && btnDer.clickeado == false && btnCentro.Arriba && btnCentro.Der && btnCentro.Izq) {
                            btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_centro.png")));
                            btnIzq.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_izq.png")));
                            btnArriba.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_arriba.png")));
                            btnDer.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_der.png")));
                            btnCentro.clickeado = btnCentro.esArma = true;
                            btnArriba.clickeado = btnArriba.esArma = true;
                            btnIzq.clickeado = btnIzq.esArma = true;
                            btnDer.clickeado = btnDer.esArma = true;
                            try {
                                sonido.reproducir();
                            } catch (FileNotFoundException ex) {
                                System.out.println("" + ex.getMessage());
                            } catch (IOException ex) {
                                System.out.println("" + ex.getMessage());
                            }
                            barcos--;
                            labels.get(7).setTexto(barcos + "");
                        }
                        if ((boolean) labels.get(8).presionado == true && (aviones + barcos + tanques) == 0) {

                            btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma4.png")));

                            if (isServer && server != null) {
                                server.enviarDatos(btnCentro.indice + "");
                            }
                            if (!isServer && cliente != null) {
                                cliente.enviarDatos(btnCentro.indice + "");
                            }


                            btnCentro.Ocupado = true;
                            btnCentro.clickeado = true;
                        }
                        for (Label label : labels) {
                            label.presionado = false;
                        }
                    }

                    @Override
                    public void mousePressed(MouseEvent e) {
                    }

                    @Override
                    public void mouseReleased(MouseEvent e) {
                    }

                    @Override
                    public void mouseEntered(MouseEvent e) {
                        if (btnCentro.clickeado == false) {
                            if ((boolean) labels.get(2).presionado == true && tanques > 0 && btnCentro.Izq && btnIzq.clickeado == false) {
                                btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma1_der.png")));
                                btnIzq.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma1_izq.png")));
                            }
                            if ((boolean) labels.get(4).presionado == true && aviones > 0 && btnCentro.Izq && btnCentro.Der && btnIzq.clickeado == false && btnDer.clickeado == false) {
                                btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma2_centro.png")));
                                btnIzq.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma2_izq.png")));
                                btnDer.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma2_der.png")));
                            }
                            if ((boolean) labels.get(6).presionado == true && barcos > 0 && btnArriba.clickeado == false && btnIzq.clickeado == false && btnCentro.clickeado == false && btnDer.clickeado == false && btnCentro.Izq && btnCentro.Der && btnCentro.Arriba) {
                                btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_centro.png")));
                                btnIzq.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_izq.png")));
                                btnArriba.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_arriba.png")));
                                btnDer.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma3_der.png")));
                            }
                        }
                        if ((boolean) labels.get(8).presionado == true && (aviones + barcos + tanques) == 0) {
                            btnCentro.boton.setIcon(new ImageIcon(getClass().getResource("imagenes/arma4.png")));
                        }
                    }

                    @Override
                    public void mouseExited(MouseEvent e) {
                        int cont = 0;
                        for (int j = 0; j < 100; j++) {
                            if (btnCentrones.get(j).Explotado) {
                                cont++;
                            }
//                            if (btnCentrones.get(j).Ocupado) {
//                                JOptionPane.showMessageDialog(null, "SU TURNO");
//                            }
                        }
                        labels.get(1).setTexto("   " + (vida - cont));
                        if (cont == vida) {
                            JOptionPane.showMessageDialog(rootPane, "Has perdido");
                            System.exit(0);
                        }
                        if ((btnCentro.clickeado == false) && (aviones + barcos + tanques) != 0) {
                            btnCentro.boton.setIcon(null);
                        }
                        if (btnIzq.clickeado == false && (aviones + barcos + tanques) != 0) {
                            btnIzq.boton.setIcon(null);
                        }
                        if (btnDer.clickeado == false && (aviones + barcos + tanques) != 0) {
                            btnDer.boton.setIcon(null);
                        }
                        if (btnArriba.clickeado == false && (aviones + barcos + tanques) != 0) {
                            btnArriba.boton.setIcon(null);
                        }
                        if (btnCentro.Ocupado == false && (aviones + barcos + tanques) == 0) {
                            btnCentro.boton.setIcon(null);
                        }
                        if (!borrado && (aviones + barcos + tanques) == 0) {
                            for (int i = 0; i < 100; i++) {
                                if (btnCentrones.get(i).clickeado) {
                                    btnCentrones.get(i).boton.setBackground(Color.green);
                                    btnCentrones.get(i).boton.setIcon(null);
                                }
                            }
                            borrado = true;
                        }
                        int numeroRecibido = -1;
                        if (isServer) {
                            if (server != null) {
                                numeroRecibido = Integer.parseInt(server.getMsg());
                                if (btnCentrones.get(numeroRecibido + dimension_tabla).esArma) {
                                    btnCentrones.get(numeroRecibido + dimension_tabla).boton.setBackground(Color.red);
                                    btnCentrones.get(numeroRecibido + dimension_tabla).boton.setIcon(new ImageIcon(getClass().getResource("imagenes/explosion.png")));
                                    btnCentrones.get(numeroRecibido + dimension_tabla).Explotado = true;
                                }
                            }

                        } else {

                            if (cliente != null) {

                                numeroRecibido = Integer.parseInt(cliente.getMsg());

                                if (btnCentrones.get(numeroRecibido + dimension_tabla).esArma) {
                                    btnCentrones.get(numeroRecibido + dimension_tabla).boton.setBackground(Color.red);
                                    btnCentrones.get(numeroRecibido + dimension_tabla).boton.setIcon(new ImageIcon(getClass().getResource("imagenes/explosion.png")));
                                    btnCentrones.get(numeroRecibido + dimension_tabla).Explotado = true;
                                }
                            }

                        }
                    }
                };
                if (btnIzq.Ocupado) {
                    btnCentrones.remove(cont_btns - 1);
                    btnCentrones.add(cont_btns - 1, btnIzq);
                    panel.add(btnCentrones.get(cont_btns - 1).boton);
                }
                btnCentro.boton.addMouseListener(ml);
                btnCentrones.remove(cont_btns);
                btnCentrones.add(cont_btns, btnCentro);
                panel.add(btnCentrones.get(cont_btns).boton);
                cont_btns++;
            }
        }


        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setSize(680, 700);
        setResizable(false);
        setLocationRelativeTo(null);
        this.setVisible(true);
        ventanaConexion.setVisible(true);
    }
// </editor-fold>         

    // <editor-fold defaultstate="collapsed" desc="METODOS">                          
    public JPanel obtenerPanel() {
        return panel;
    }

    public static void main(String[] args) {
        new Botones();
    }

    @Override
    public void update(Observable o, Object arg) {
    }
// </editor-fold>         
}
